package main

import (
	"fmt"
)

//基于方法实现, 不区分接口的名称
// 定义接口 让其他结构体实现方法, 实现多态
type Usb interface {
	Start()
	Stop()
}

type Student struct {
	Name string
}

type Doctor struct {
	Name string
}

func (s *Student) Start() {
	fmt.Println(s.Name, "调用了Start方法")
}

func (s *Student) Stop() {
	fmt.Println(s.Name, "调用了Stop方法")
}

func (d *Doctor) Start() {
	fmt.Println(d.Name, "调用了Start方法")
}

func (d *Doctor) Stop() {
	fmt.Println(d.Name, "调用了Stop方法")
}

type Computer struct {
}

// 只要实现usb接口的子类都可以传参
func (c *Computer) Working(usb Usb) {
	usb.Start()
	usb.Stop()
}

//方法入口
func main() {
	c := Computer{}
	s := &Student{Name: "学生"}
	d := &Doctor{Name: "医生"}

	c.Working(d)

	fmt.Println(s)

}
